<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1.对象</title>
</head>
<body>
    
</body>
<script>
    /* 
        1.对象的概念
        在JavaScript中对象是一组无序的相关属性和方法的集合
        所有事物都是对象，例如字符串数组数值函数等
        对象由属性和方法构成
        属性：事物的特征，在对象中用属性表示
        方法：事物的行为
        为什么需要对象
        保存一个值时，可以使用变量，堡村一组值时就可以使用数组
        如果要保存一个人的完整信息，例如将张鹏飞这个人的信息在数组中保存
    */
    var people=['xxx','男',27,183,170]
    /* 上述例子用数组保存数据的缺点是：数字只能通过索引值访问
        开发者想要使用的时候需要记住每一个索引，如果数据量庞大的时候，开发者不可能全部记得
        只能保存事物的特征，不能保存事物的行为
        为了更好的存储一组数据，对象应运而生，对象中为没想数据设置属性名称
        可以访问数据更语义化，数据结构清晰，表意明显

        对象书写格式：
        var 对象名={
             属性名1：属性值1，
             属性名2：属性值2，
             方法名：方法1
        }
    */
    var obj={
        name:'xxx',
        age:28,
        height:183,
        weight:170
    }
    /* 创建自定义对象的三种的方式
        利用字面量创建对象：
        就是使用{}，里面包含具体的事物的属性和方法
        {}里面采用键值对的形式表示，键值对指的是属性名=属性值
    */
    var person={
        name:'xxx',
        age:28,
        sex:'男',
        height:183,
        weight:170,
        eat:function(){
            alert('我今天吃了四顿饭')
        }
    }
    /*
        对象的使用：
        对象的属性：对象中存储具体数据的键值对中，键称为对象的属性，即对象中存储具体数据的项
        对象的方法：对象中存储函数的键值对的键，称为对象的方法，即对象中存储函数项 
        访问对象属性：对象里面属性的调用：对象名.属性名
        另外一种调用方式：对象[‘属性名’]注意中括号里面要加引号，以键取值
        -----------------------------
        调用方法：对象.方法名()
     */
    console.log("姓名："+person.name)
    console.log("姓名："+person['name'])
    person.eat()
    /* 
        变量，属性，函数，方法总结
        属性是对象的一部分，而变量不是对象的一部分，变量是单独存储数据的容器
        变量：单独声名赋值，单独存在
        属性：在对象里面的变量才称为属性，不需要生命，用来描述该对象的特征
        函数：单独存在，通过函数名（），就可以调用
        方法：是对象的一部分，方法不需要声名，使用对象名.方法名()的方式调用
    */
   /* 
        第二种创建方式通过new object()
        通过内置构造函数Object()创建对象，此时person1变量已经保存了创建出来的空对象
   */
  //创建一个空对象,O要大写
  var person1=new Object();
  //给空对象添加属性和方法
  person1.name="LiSi"
  person1.age=28 
  person1.eat=function(){
    alert("今天吃了五顿饭 ")
  }
  console.log(person1)
  /* 
    第三种创建方式：通过构造函数创建对象
    构造函数是一种特殊的函数主要用来初识化对象，总与new一起使用，
    可以把对象中的公共属性和方法抽出来，然后封装到这个函数里面
    构造函数的封装格式：
    function 构造函数的名字(参数列表){
        this.属性名1=参数1
        this.属性名2=参数2
        this.属性名3=参数3
        this.属性名4=参数4
    }
    使用：
    var obj=new Objcet(实参1，实参2)
  */
    function Objcet(name,age,eat){
        this.name=name,
        this.age=age,
        this.eat=eat
    }
    var obj=new Objcet("张三","11",function(){alert("构造方法传入方法")})
    console.log(obj)
    </script>
</html>